package com.atguigu.day03.test;

/*
位运算符:按照二进制位进行运算
 &: 上下为1 结果是1   ****
 |: 上下有1 则1
 ^: 相同为0 不同为1
 ~: 0变1 1变0
 -----
 <<: 左移一位 * 2  ****
 >>: 右移一位 / 2
 >>>: 无论正负 只要向右移动最高位都补0
注意:
  1.符合两边是布尔值 则 & | ^ 代表的是逻辑运算符
    符合两边是整数 则   & | ^ 代表的是位运算符



 */
class BitOperator2{
    public static void main(String[] args) {
        System.out.println("------------ >>> ------------------");
        System.out.println(8 >>>1);
        /*
        11111111111111111111111111111000|
        01111111111111111111111111111100|
         */
        System.out.println(-8 >>>1);//2147483644
        System.out.println(0B01111111111111111111111111111100);

        System.out.println("------------ >> ------------------");
        /*
        1000|
          10|
         100|

         */
        System.out.println(8>>1);//4
        System.out.println(8>>2);//2


        System.out.println("------------ << ------------------");
        /*
        10|
      1000|
       100|

         */
        System.out.println(2<<1);//4
        System.out.println(2<<2);//8
    }
}
public class BitOperator {
    public static void main(String[] args) {

        /*
        1 0 1
        0 1 1
    &
    --------------------
        0 0 1
         */
        System.out.println(5&3);
        /*
              1 0 1
              1 1 0
    &
    --------------------
              1 0 0
         */
        System.out.println(5&6);


        /*
           1 0 1
           0 1 1
         |
         -------------
           1 1 1

         */
        System.out.println(5|3);
        /*

          1 0 1
          0 1 1
        ^
        --------------
          1 1 0
         */

        System.out.println(5^3);

        /*

        0000 0110
        取反:
        补码:  1111 1001
        反码:  1111 1000
        原码:  1000 0111
         */

        System.out.println(~6);
    }
}
